package valid

import (
	"gitee.com/gousing/helper/internal"
)

// IsZero 判断对象是否为零值
//   - 约定为零值:  nil, 为nil的任何指针
//   - 约定为非零值:  struct{}, 不为nil的指针, 不可比较类型
func IsZero(v any) bool {
	if v == nil {
		return true
	}
	return internal.IsZero(v)
}

// IsNil 判断 any 对象是否为 nil
func IsNil(v any) bool {
	if v == nil {
		return true
	}
	return internal.IsNil(v)
}

// IsEmpty 判断 any 对象是否为空
//   - 空值检查：如果输入值为 nil或nil 指针，函数返回 true。
//   - 指针处理：如果值是指针类型，函数会递归地解引用指针，直到找到非指针类型或遇到 nil 指针。
//   - 集合类型：对于数组、映射、切片和字符串，函数检查其长度是否为零。
//   - 基本类型：对于布尔值、整数、浮点数、接口和指针，函数使用 reflect.Value 的 IsZero 方法来判断其是否为空。
//   - 默认情况：对于未明确处理的其他类型，函数返回 false。
func IsEmpty(v any) bool {
	if v == nil {
		return true
	}
	return internal.IsEmpty(v)
}
